package editor.graphics;

import java.awt.geom.Point2D;
import java.util.Collection;
import java.util.List;

import javax.swing.JOptionPane;

public class PointSorter {
	
	private static final double DIF_UNIR = 2;

	public static void alinearIzquierda(Collection<Point2D> puntos) {
		float min= 65000;
	
		for(Point2D p: puntos){
			min = (float)Math.min(p.getX(), min);
		}
		for(Point2D p: puntos){
			p.setLocation(min, p.getY());
		}
	}

	public static void alinearDerecha(Collection<Point2D> puntos) {
		float max= -65000;
		for(Point2D p: puntos){
			max = (float)Math.max(p.getX(), max);
		}
		for(Point2D p: puntos){
			p.setLocation(max, p.getY());
		}
	}

	public static void alinearArriba(Collection<Point2D> puntos) {
		float min= +65000;
		for(Point2D p: puntos){
			min = (float)Math.min(p.getY(), min);
		}
		for(Point2D p: puntos){
			p.setLocation(p.getX(), min);
		}
	}

	public static void alinearAbajo(Collection<Point2D> puntos) {
		float max= -65000;
		for(Point2D p: puntos){
			max = (float)Math.max(p.getY(), max);
		}
		for(Point2D p: puntos){
			p.setLocation(p.getX(),max);
		}
	}

	public static void unirArriba(List<Point2D> puntos) {
		if(puntos.size()==2){
			Point2D pto1 = puntos.get(1);
			Point2D pto2 = puntos.get(0);
			if(pto1.getY()<=pto2.getY()){//pto1 esta mas arriba
				//pongo al pto2 en el mismo lugar y lo bajo DIF_UNIR
				pto2.setLocation(pto1.getX(), pto1.getY() + DIF_UNIR);
			}else{//el pto2 esta mas arriba
				//pongo al pto1 en el mismo lugar y lo bajo
				pto1.setLocation(pto2.getX(), pto2.getY() + DIF_UNIR);
			}
		}
		else JOptionPane.showMessageDialog(null, "Debe elegir dos puntos");
	}

	public static void unirAbajo(List<Point2D> puntos) {
		if(puntos.size()==2){
			Point2D pto1 = puntos.get(1);
			Point2D pto2 = puntos.get(0);
			if(pto1.getY()>=pto2.getY()){//pto1 es mas bajo
				pto2.setLocation(pto1.getX(), pto1.getY() - DIF_UNIR);
			}else{
				pto1.setLocation(pto2.getX(), pto2.getY() - DIF_UNIR);
			}
		}
		else JOptionPane.showMessageDialog(null, "Debe elegir dos puntos");
	}

	public static void unirDerecha(List<Point2D> puntos) {
		if(puntos.size()==2){
			Point2D pto1 = puntos.get(1);
			Point2D pto2 = puntos.get(0);
			if(pto1.getX() >= pto2.getX()){
				pto2.setLocation(pto1.getX() - DIF_UNIR, pto1.getY());
			}else{
				pto1.setLocation(pto2.getX() - DIF_UNIR, pto2.getY());
			}
		}
		else JOptionPane.showMessageDialog(null, "Debe elegir dos puntos");
	}

	public static void unirIzquierda(List<Point2D> puntos) {
		if(puntos.size()==2){
			Point2D pto1 = puntos.get(1);
			Point2D pto2 = puntos.get(0);
			if(pto1.getX()<=pto2.getX()){
				pto2.setLocation(pto1.getX() + DIF_UNIR, pto1.getY());
			}else{
				pto1.setLocation(pto2.getX() + DIF_UNIR, pto2.getY());
			}
		}
		else JOptionPane.showMessageDialog(null, "Debe elegir dos puntos");
	}

}
